Sonatype Nexus als Docker Registry
Sonatype Nexus installieren und einrichten
Wir erstellen uns erst ein Verzeichnis für die Nexus Konfiguration und setzen die Berechtigungen auf die UID/GID 200.
root:~# mkdir -p /opt/sonatype/nexus/nexus-data && sudo chown -R 200:200 /opt/sonatype/nexus/nexus-data
Nun starten wir Sonatype Nexus als Docker. Dabei geben wir den Port 8081 als Nexus Port und 5000 als Port für die Docker Registrie, die wir später konfigurieren. Als Volume verwenden wir das soeben erstellte Verzeichnis.
root:~# docker run -d -p 8081:8081 -p 5000:5000 --name nexus -e NEXUS_CONTEXT='' -v /etc/localtime:/etc/localtime:ro -v /opt/sonatype/nexus/nexus-data:/nexus-data sonatype/nexus3
Nun erstellen wir uns noch eine Apache Konfiguration, der als Proxy für unser Nexus Repository eingerichtet ist. Dazu erstellen wir die Datei /etc/apache2/conf-available/nexus.conf mit foldendem Inhalt. Der Hostname nexus.example.com muss natürlich mit dem jeweiligen Hostnamen ersetzt werden.
# Proxy settings for nexus
#
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
ProxyPassReverseCookieDomain 127.0.0.1 "nexus.example.com"
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
In der Vhost Datei für nexus.example.com, fügen wir die Nexus Konfiguration mit Include ein.
<VirtualHost *:443>
ServerName nexus.example.com
DocumentRoot /var/www/html
# Nexus Konfiguration
Include conf-available/nexus.conf
....
</VirtualHost>
Nun gehen wir auf https://nexus.example.com/ und vervollständigen das Setup. Dazu melden wir uns als der Benutzer admin an. Das Passwort ist unter /opt/sonatype/nexus/nexus-data/admin.password zu finden.
Nun setzen wir für den Benutzer admin ein neues Passwort.
Nun konfigurieren wir noch den Zugriff, ob wir Anonymous zulassen oder nicht.
Nachdem wir uns als Benutzer admin angemeldet haben, gehen wir auf Settings / Repositories und erstellen ein neues Repository vom Typ docker (hosted).
Dort tragen wir unter HTTP Port, den Port 5000 ein, den wir beim erstellen des Docker Image gewählt haben. Außerdem aktivieren wir noch die Docker V1 API.
Nachdem wir das neue Docker Repository erstellt haben, gehen wir auf Security / Realm und fügen die Authentifizierung Docker Bearer Token Realm hinzu.
Unsere Dockerumgebung einrichten
Damit wir die Neue Docker Regestry von Sonatype Nexus nutzen können, müssen wir diese Registriy als Insecure Registries einstellen, da wir eine HTTP Verbindung nutzen.
Notiz
Wie man eine HTTPS Verbindung zur Nexus Docker Registry einrichtet, habe ich leider noch nicht gelesen.
Wir tragen die neue Docker Regestry als Insecure Registries in der Docker Konfiguration wie folgt ein.
root:~# vi /etc/docker/daemon.json
{
"insecure-registries" : ["nexus.example.com:5000"]
}
Im Anschluß daran starten wir den Docker Daemon neu.
root:~# systemctl restart docker
Wenn wir uns die Docker Konfiguration ansehen, sollte die neue Docker Registry auftauchen.
root:~# docker info
Neue Docker Registry verwenden
Zuerst erstellen wir uns eine Datei mit dem Anmelde Passwort für unsere Docker Registry.
root:~# vi ~/login.txt
Dann melden wir uns mit docker login an die neue Docker Registry an.
root:~# cat ~/login.txt | docker login -u admin --password-stdin nexus.example.com:5000
Der erste Schritt zur Verwendung des selbst gehosteten Registrierung besteht darin, ein Docker-Image für diese Registrierung mit dem Befehl docker tag zu markieren.
root:~# docker tag debian nexus.example.com:5000/debian
Um das im obigen Beispiel erstellte Image zu übertragen, nutzen wir den Befehl docker push.
root:~# docker push nexus.example.com:5000/debian
Um das im obigen Beispiel erstellte Image abzurufen, nutzen wir den Befehl docker pull.
root:~# docker pull nexus.example.com:5000/debian:latest